package view;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.util.ArrayList;

import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;

import model.CiiBay;
import model.Feedback;
import model.Gebruiker;

/**
 * Laat de feedback van een enkele user zien
 * @author Jaap
 *
 */
@SuppressWarnings("serial")
public class FeedbackVanUserView extends JPanel {
	private CiiBay ciiBay;
	private Gebruiker gebruiker;
	private GridBagConstraints c;
	
	public FeedbackVanUserView(CiiBay ciiBay, Gebruiker gebruiker){
		this.ciiBay = ciiBay;
		this.gebruiker = gebruiker;
		c = new GridBagConstraints();
		setLayout(new GridBagLayout());
		setBackground(Color.ORANGE);
		maakView();
	}
	/**
	 * Maakt de layout
	 * @author Jaap
	 */
	public void maakView(){
		int y  = 1;
		c.fill = GridBagConstraints.BOTH;
		c.anchor = GridBagConstraints.WEST;
		c.insets = new Insets(0,0,5,0);
		int aantal = 0;
		c.gridx = 0;
		c.gridy = 0;
		add(new JLabel("Feedback op " + gebruiker.getNaam()+" ", JLabel.CENTER), c);
		for(Feedback f : ciiBay.getFeedback()){
			c.gridy = y;
			if(f.getNaarGebruiker().getID() == gebruiker.getID()){
				add(new EnkelFeedbackPaneel(f),c);
				aantal++;
				y++;
			}	
		}
		if(aantal == 0){
			c.gridy = 2;
			add(new JLabel("Deze gebruiker heeft nog geen feedback ontvangen!", JLabel.CENTER), c);
		}
	}
	
	class EnkelFeedbackPaneel extends JPanel{
		public EnkelFeedbackPaneel(Feedback f){
			this.setBackground(Color.ORANGE);
			this.setLayout(new BorderLayout());
			JPanel links = new JPanel();
			JPanel rechts = new JPanel();
			add(links, BorderLayout.WEST);
			add(rechts, BorderLayout.CENTER);
			links.setBackground(Color.ORANGE);
			rechts.setBackground(Color.ORANGE);
			links.setLayout(new GridBagLayout());
			rechts.setLayout(new BorderLayout());
			JPanel rechts2 = new JPanel();
			rechts2.setBackground(Color.ORANGE);
			rechts2.setLayout(new GridBagLayout());
			rechts.add(rechts2, BorderLayout.WEST);
			GridBagConstraints c2 = new GridBagConstraints();
			c2.anchor = GridBagConstraints.NORTHWEST;
			c2.gridx = 0;
			c2.gridy = 0;
			links.add(new JLabel("Advertentie:  "), c2);
			c2.gridy = 1;
			links.add(new JLabel("Van:  "), c2);
			c2.gridy = 2;
			links.add(new JLabel("Feedback:  "), c2);
			c2.gridx = 1;
			c2.gridy = 0;
			rechts2.add(new JLabel(f.getAdvertentie().getTitel()), c2);
			c2.gridy = 1;
			rechts2.add(new JLabel(f.getVanGebruiker().getNaam()), c2);
			c2.gridy = 2;
			JTextArea beschrijving = new JTextArea(getBeschrijving(f));
			beschrijving.setEditable(false);
			beschrijving.setBackground(Color.ORANGE);
			rechts2.add(beschrijving, c2);
			this.setBorder(BorderFactory.createMatteBorder(2, 2, 2, 2, Color.BLACK));
		}
		
		/**
		 * Deelt de beschrijving op in een (onbepaald) aantal regels. Een regel is maximaal 65 karakters lang zodat de layout goed blijft.
		 * Deze functie split de beschrijving eerst in regels op, en daarna per regel in woorden. Maakt vervolgens nieuwe regels aan die niet langer zijn dan 65 karakters.
		 * @param a - De advertentie waar de beschrijving in staat.
		 * @return beschrijving - De beschrijving zoals deze in de zoekresultaten zal verschijnen
		 * @author Jaap
		 */
		public String getBeschrijving(Feedback f){
			//Max regel lengte 65!!!!!
			String[] beschrijvingArray = f.getFeedback().split("\n");
			ArrayList<String> beschrijvingLijst = new ArrayList<String>();
			for(String s : beschrijvingArray){
					String[] woordenPerZin = s.split(" ");
					for(String woord : woordenPerZin){
						String kleinWoord = "";
						if((woord.length() > 65)){
							kleinWoord = woord.substring(0, 65);
						}else{
							kleinWoord = woord;
						}
						if(beschrijvingLijst.size() > 0){
							String regel = beschrijvingLijst.get(beschrijvingLijst.size() - 1);
							if(regel.length() < 65){
								if(((regel.length() + woord.length()) + 1) <= 65){
									regel = regel + " " + kleinWoord;
									beschrijvingLijst.remove(beschrijvingLijst.size() - 1);
									beschrijvingLijst.add(regel);
								}else{
									String nieuweRegel3 = "\n" + kleinWoord;
									beschrijvingLijst.add(nieuweRegel3);
								}
							}else{
								String nieuweRegel2 = "\n" + kleinWoord;
								beschrijvingLijst.add(nieuweRegel2);
							}
						} else {
							String nieuweRegel1 = kleinWoord;
							beschrijvingLijst.add(nieuweRegel1);
						}
					}
			}
			String beschrijving = "";
			for(String regel : beschrijvingLijst){
				beschrijving += regel;
			}
			return beschrijving;
		}
	}
}
